home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_asm / asm_kit / pclock.asm < prev    next >
Assembly Source File  |  1985-08-05  |  3KB  |  102 lines

  1.         TITLE   CLOCK - Enable/disable clock interrupts
  2.  
  3. ; "CLOCK" module for MS-DOS profile program. This implements the
  4. ;       PROFIL program on the Seattle Computer Products 8086 system
  5.  
  6. INTSEG  SEGMENT AT 0
  7.         ORG     60H+7*4
  8. INTVECTOR LABEL WORD
  9. INTSEG  ENDS
  10.  
  11. CODE    SEGMENT BYTE PUBLIC
  12.  
  13.         PUBLIC  CLOCKON,CLOCKOFF,LEAVE_INT
  14.  
  15.         EXTRN   CLK_INTER:NEAR
  16.  
  17.         ASSUME  CS:CODE, DS:CODE, ES:CODE
  18.  
  19. BASE=           0F0H
  20. STCSTAT=        BASE+5
  21. STCDATA=        BASE+4
  22. STCCOMND=       BASE+5
  23. SLAVECOM=       BASE+2
  24. MASTCOM=        BASE+0
  25. SLAVEMASK=      BASE+3
  26.  
  27. ;The following mode selects F2 as counter source (400 KHz), reload from
  28. ;load, count up once in binary with TC toggle.
  29. MODE=           0C02H
  30.  
  31. ;************************************************
  32. ;Enable clock and start generating clock interrupt.
  33. ;       Clock interval in micro seconds passed in DX
  34. CLOCKON PROC    NEAR
  35.         MOV     AL,4                    ;Set pointer to mode register 4
  36.         OUT     STCCOMND,AL
  37.         MOV     AL,MODE AND 0FFH        ;Low byte of mode
  38.         OUT     STCDATA,AL
  39.         MOV     AL,MODE/100H            ;High byte of mode
  40.         OUT     STCDATA,AL
  41.         MOV     AL,0CH                  ;Counter 4 load register
  42.         OUT     STCCOMND,AL
  43.         XCHG    AX,DX                   ;Count in microseconds
  44.         XOR     DX,DX
  45.         SHL     AX,1
  46.         RCL     DX,1                    ;Count in DX:AX times 2
  47.         MOV     BX,5
  48.         DIV     BX                      ;AX=Count/2.5
  49.         OUT     STCDATA,AL
  50.         MOV     AL,AH
  51.         OUT     STCDATA,AL              ;Set the load register
  52.         MOV     AL,0E4H                 ;Clear output 4
  53.         OUT     STCCOMND,AL
  54.  
  55.         ASSUME  DS:INTSEG
  56.  
  57.         PUSH    DS
  58.         XOR     AX,AX
  59.         MOV     DS,AX
  60. ;Set the clock interrupt
  61.         MOV     INTVECTOR,OFFSET CLK_INTER
  62.         MOV     INTVECTOR+2,CS
  63.         POP     DS
  64.  
  65.         ASSUME  DS:CODE
  66.  
  67.         IN      AL,SLAVEMASK
  68.         AND     AL,7FH                  ;Enable counter 4 interrupt
  69.         OUT     SLAVEMASK,AL
  70.         MOV     AL,68H                  ;Load and arm counter 4
  71.         OUT     STCCOMND,AL             ;Let her rip!
  72.         RET
  73. CLOCKON ENDP
  74.  
  75. ;************************************************
  76. ;Disable clock and clock interrupt
  77. CLOCKOFF PROC   NEAR
  78.         IN      AL,SLAVEMASK
  79.         OR      AL,80H                  ;Turn off counter 4 interrupt
  80.         OUT     SLAVEMASK,AL
  81.         RET
  82. CLOCKOFF ENDP
  83.  
  84.  
  85. ;************************************************
  86. ;This routine is jumped to from the CLK_INTER
  87. ;       routine to perform and steps to reset the interrupt
  88. LEAVE_INT:
  89.         PUSH    AX
  90.         MOV     AL,0E4H                 ;Clear output 4
  91.         OUT     STCCOMND,AL
  92.         MOV     AL,20H                  ;End-of-interrupt command
  93.         OUT     SLAVECOM,AL
  94.         OUT     MASTCOM,AL
  95.         MOV     AL,68H                  ;Load and arm counter 4
  96.         OUT     STCCOMND,AL
  97.         POP     AX
  98.         IRET
  99.  
  100. CODE    ENDS
  101.         END
  102.